#include <gtest/gtest.h>
#include <armadillo>
#include <glog/logging.h>
#include "common_function.hpp"

using namespace std;

int col = 4, row = 4;
static int channel = 2;

TEST(test_print, print2Dvector) {
    LOG(INFO) << "Let's print the 2D std::vector mat's address!";
    
    vector<vector<float>> vec(row, vector<float>(col, 1));
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << &vec[i][j] << " ";
        }
        cout << endl;
    }
    cout << "2D std::vector mat  扩容后的地址!";

    vec[1].push_back(2);//在第1行插入元素2
    vec[1].push_back(2);//在第1行插入元素2
    cout << "现在第一行元素个数：" << vec[1].size() << endl; //输出现在元素个数

    //打印扩容后的内存地址
    for (int i = 0; i < row; i++) {
        if (i == 1) {
            for (int j = 0; j < col + 2; j++) {
                cout << &vec[i][j] << " ";
            }
            cout << endl;
            continue;
        }
        for (int j = 0; j < col; j++) {
            cout << &vec[i][j] << " ";
        }
        cout << endl;
    }
}

TEST(test_print, print2Dcube) {
    LOG(INFO) << "Let's print the 2D arma::cube mat's address!";
    
    arma::fcube matB(row, col, 1, arma::fill::ones);
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            cout << &matB(i,j,0) << " ";
        }
        cout << endl;
    }

    cout << "2D arma::cube mat  扩容后的地址:" << endl;
    matB.insert_rows(4, 1);
    matB.insert_rows(4, 1);
    for(int i=0;i<row+2;i++)
    {
        for(int j=0;j<col;j++)
        {
            cout << &matB(i,j,0) << " ";
        }
        cout << endl;
    }
}

// TEST(print, print3Dvector) {
//     LOG(INFO) << "Let's print the 3D std::vector mat's address!";
//     vector<vector < vector<float> >>vec(channel, vector<vector<float>>(row, vector<float>(col , 1)));

//     for(int k = 0; k < channel ; k++)
//     {
//         for (int i = 0; i < row; i++) 
//         {
//             for (int j = 0; j < col; j++) 
//             {
//                 cout << &vec[k][i][j] << " ";
//             }
//                 cout << endl;
//         }
//     }
//     cout << "3D std::vector mat  扩容后的地址:" << endl;
//     // cout << "现在第0个channel第一行元素个数：" << vec[0][1].size() << endl; //输出现在元素个数
//     vec[0][1].push_back(2);//在第0个channel第2行插入元素2
//     vec[0][1].push_back(2);//在第0个channel第2行插入元素2
//     // cout << "现在第0个channel第一行元素个数：" << vec[0][1].size() << endl; //输出现在元素个数
    
//     for(int k = 0; k < channel; k++)
//     {
//         //输出第0个channel
//         if(k == 0){
//             for(int i = 0; i < row; i ++){
//                 //处理第1行
//                 if (i == 1){
//                     for(int j = 0; j < col+2; j++){
//                         cout << &vec[k][i][j] << " ";
//                     }
//                     cout << endl;                   
//                 }
//                 //处理第0，2，3行
//                 if(i != 1){
//                     for(int j = 0; j < col; j++){
//                         cout << &vec[k][i][j] << " ";
//                     }
//                     cout << endl;
//                 }
//             }
//         }
//         else{
//         //输出第1个channel
//         for(int i = 0; i < row; i++){
//             for(int j = 0; j< col; j++){
//                 cout << &vec[k][i][j] << " ";
//             }
//             cout << endl;
//         }
//         }

        
//     }
// }
// TEST(print, print3Dcube) {
//     LOG(INFO) << "Let's print the 3D arma:cube mat's address!";
//     arma::fcube matB(row, col, channel, arma::fill::ones);
//     for(int k = 0; k < channel; k++){
//         for(int i=0;i<row;i++)
//         {
//             for(int j=0;j<col;j++)
//             {
//                 cout << matB(i, j, k) << " ";
//             }
//             cout << endl;
//         }
//     }
//     cout << "3D arma:cube mat  扩容后的地址:" << endl;
// }